%======================================================================
%----------------------------------------------------------------------
%               XX                           X
%                                            X
%               XX    XXX   XXX   XXX   XXX  X  XXXX
%                X   X   X X   X X   X X   X X X
%                X   XXXXX XXXXX XXXXX X     X  XXX
%                X   X     X     X     X   X X     X
%               XXX   XXX   XXX   XXX   XXX  X XXXX
%----------------------------------------------------------------------
%               SPECIFICATION FOR COMMON IEEE STYLES
%----------------------------------------------------------------------
%               Gregory L. Plett, Istv\'{a}n Koll\'{a}r.
%======================================================================
\documentclass[%
    %draft,
    %submission,
    %compressed,
    a4paper,
    %12pt,
    10pt,
    final,
    %technote,
    %internal,
    %submitted,
    %inpress,
    %reprint,
    %titlepage,
    notitlepage,
    %anonymous,
    narroweqnarray,
    inline,
    oneside,
    %invited,
    %conference
    article
    ]{ieee}

%\documentclass[a4paper,12pt]{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{graphicx}
\usepackage{epsfig}
\usepackage{epstopdf}

\newcommand{\latexiie}{\LaTeX2{\Large$_\varepsilon$}}

%\usepackage{ieeetsp}    % if you want the "trans. sig. pro." style
%\usepackage{ieeetc}    % if you want the "trans. comp." style
%\usepackage{ieeeimtc}    % if you want the IMTC conference style

% Use the `endfloat' package to move figures and tables to the end
% of the paper. Useful for `submission' mode.
%\usepackage {endfloat}

% Use the `times' package to use Helvetica and Times-Roman fonts
% instead of the standard Computer Modern fonts. Useful for the
% IEEE Computer Society transactions.
%\usepackage{times}
% (Note: If you have the commercial package `mathtime,' (from
% y&y (http://www.yandy.com), it is much better, but the `times'
% package works too). So, if you have it...
%\usepackage {mathtime}

% for any plug-in code... insert it here. For example, the CDC style...
%\usepackage{ieeecdc}

\begin{document}

%----------------------------------------------------------------------
% Title Information, Abstract and Keywords
%----------------------------------------------------------------------
\title[]{
  Trabajo Pr\'actico Especial 3: Redes de Hopfield}

% format author this way for journal articles.
% MAKE SURE THERE ARE NO SPACES BEFORE A \member OR \authorinfo
% COMMAND (this also means `don't break the line before these
% commands).
%\author[PLETT AND KOLL\'{A}R]{Gregory L. Plett\member{Student
%       Member},\authorinfo{G.\,L.\,Plett is with the Department of Electrical
%       Engineering, Stanford University, Stanford, CA 94305--9510.
%       Phone: $+$1\,650\,723--4769, e-mail: glp@simoon.stanford.edu}%
%\and{}and Istv\'{a}n Koll\'{a}r\member{Fellow}\authorinfo{I.\
%       Koll\'{a}r is with the Department of Measurement and Information
%       Systems, Technical University of Budapest, 1521 Budapest, Hungary.
%       Phone: $+$\,36\,1\,463--1774, fax: +\,36\,1\,463--4112,
%       e-mail: kollar@mmt.bme.hu}
%}
\author{
     Alan Idesis,
\and Mar\'ia Eugenia Cura,
\and Tom\'as Alvarez
}

% format author this way for conference proceedings
%\author[PLETT AND KOLL\'{A}R]{%
        %Gregory L. Plett\member{Student Member},\authorinfo{%
        %Department of Electrical Engineering,\\
        %Stanford University, Stanford, CA 94305-9510.\\
        %Phone: $+$1\,650\,723-4769, email: glp@simoon.stanford.edu}%
%\and{}and%
%\and{}Istv\'{a}n Koll\'{a}r\member{Fellow}\authorinfo{%
        %Department of Measurement and Instrument Engineering,\\
        %Technical University of Budapest, 1521 Budapest, Hungary.\\
        %Phone: $+$\,36\,1\,463-1774, fax: +\,36\,1\,463-4112,
        %email: kollar@mmt.bme.hu}
%}

%\journal{IEEE Trans.\ on Instrum.\ Meas.}
%\titletext{, VOL.\ 46, NO.\ 6, DECEMBER\ 1997}
%\ieeecopyright{0018--9456/97\$10.00 \copyright\ 1997 IEEE}
%\lognumber{xxxxxxx}
%\pubitemident{S 0018--9456(97)09426--6}
%\loginfo{Manuscript received September 27, 1997.}
%\firstpage{1217}

%\confplacedate{Ottawa, Canada, May 19--21, 1997}

\maketitle

%\begin{keywords}
%Style file, \latexiie, Microsoft Word, IEEE Publications, Instrumentation
%and Measurement Technology Conference, IMTC.
%\end{keywords}

%----------------------------------------------------------------------
% SECTION I: Introduction
%----------------------------------------------------------------------
\section*{Introducci\'on}

\PARstart En el presente informe se describe c\'omo se ha implementado una red de Hopfield que act\'ue como memoria asociativa direccionable por el contenido y los resultados obtenidos de esta implementaci\'on.

Se genera la matr\'iz de pesos correspondientes a los patrones que se desean memorizar. En este caso se tomar\'an como patrones las im\'agenes binarias propias. 

Para analizar los resultados se verifica:
\begin{itemize}
\item Si los patrones a memorizar son verdaderos atractores.
\item Qu\'e sucede con versiones ruidosas e incompletas de los patrones a memorizar.
\item Qu\'e sucede cuando se presentan patrones que no pertenecen al conjunto de patrones memorizados por la red.
\item Qu\'e sucede cuando se presenta a la red la versi\'on inversa de los patrones a memorizar.
\end{itemize}

Adem\'as, se determina cual es la cantidad m\'axima de patrones que se pueden almacenar. 

\section*{Desarrollo}
En esta secci\'on se describe el trabajo realizado al implementar la red de Hopfield. Se ha desarrollado el trabajo en el lenguaje de programaci\'on \textit{Octave}.

Como se ha mencionado anteriormente, se tomaron como patrones a memorizar unas im\'agenes binarias propias. Estas im\'agenes son todas de 64x64 p\'ixeles. Cada una de estas imagenes se transforman a un vector de $1x4096$ de -1 y 1 dependiendo del color del p\'ixel. Llamamos $N=4096$ a la cantidad de neuronas en nuestra red. 

Dependiendo de la prueba que se este realizando, para la etapa de inicializaci\'on, se utiliza un patr\'on diferente. Este patr\'on ser\'a tomado como el estado inicial $S(0)$ de las neuronas en la red.

Para la etapa de iteraci\'on, se realizaron dos implementaciones diferentes. Llamaremos ciclo al conjunto de las $N$ iteraciones en el tiempo discreto $t$ en las que se actualizan los estados de las neuronas $S(t)$. La primera implementaci\'on que se realiz\'o fue una actualizaci\'on asincr\'onica de las neuronas, donde se toma una neurona random por vez, y se la actualiza. En cada ciclo se actualiza exactamente una vez cada neurona. La segunda implementaci\'on que se realiz\'o fue la del modelo de Little, donde la actualizaci\'on es sincr\'onica. La diferencia obtenida con la implementaci\'on anterior se ver\'a en la secci\'on de resultados.

Se realiza el corte de la etapa de iteraci\'on cuando $S(t)=S(t-1)$, acorde al modelo de Hopfield. Es decir, cuando el estado de las neuronas en el tiempo $t$ es igual al estado en el tiempo $t-1$.

\section*{Resultados}

\subsection*{Atractores}
Para realizar esta verificaci\'on se le da a la red 3 patrones para que memorice y luego se inicializa la misma con cada uno de ellos. Esto se realiza con todas las im\'agenes de nuestro conjunto.

Se toman subconjuntos de a 3, 4 o 5 patrones ya que con m\'as se comenzaban a generar estados esp\'ureos de segunda clase. Un ejemplo de lo que sucede se puede observar en la Figura 1. 

Se pueden observar algunos de los resultados obtenidos para esta verificaci\'on en las Figuras 3 y 4. En la Figura 2 se puede ver la diferencia con la Figura 1 que, solamente omitiendo un patr\'on para memorizar, cambia radicalmente el resultado. Cuando el estado final de la red es igual al patr\'on con el cual se inicializ\'o la misma, el cual es uno de los que se le di\'o para memorizar, se verifica que el patr\'on a memorizar es un verdadero atractor. Esto result\'o en todos los casos probados excepto en el caso de las letras (ver en la secci\'on \textit{Otros casos}).


\subsection*{Versiones ruidosas o incompletas de los patrones memorizados}
Para esta verificaci\'on se tomaron subconjuntos de patrones y se inicializ\'o la red con una versi\'on ruidosa o incompleta de alguno de ellos. Los resultados obtenidos en la mayor\'ia de los casos fueron acordes a lo que se esperaba, es decir, se demuestra que la red ha memorizado los patrones, y la versi\'on ruidosa de alguno de ellos da como resultado el patr\'on original (ver Figuras 5 y 6). En algunos casos sin embargo, cuando la cantidad de patrones a memorizar era muy grande, o algunas im\'agenes con las que se memoriz\'o eran parecidas en ciertos sectores, el resultado obtenido era una mezcla de varias de ellas (ver Figuras 7 y 8).

Algo a observar es que, en los casos en los que se obtienen resultados en los que se infiere que la red no ha memorizado los patrones, si se repite uno de los patrones a memorizar, es decir, se le da m\'as ``peso'' a este patr\'on, resulta en que la red memoriza mejor el patr\'on en cuesti\'on. Un ejemplo es la Figura 9, que es el mismo caso que la Figura 7 pero con la imagen de los auriculares repetida.

Lo mismo sucede con versiones incompletas de los patrones a memorizar. Lo que puede suceder aqu\'i es que como se puede ver en la Figura 10, la parte que falta en la imagen puede resultar en que la red devuelva otro de los patrones que memoriz\'o. En este caso se inicializ\'o la red con una computadora a la que le falta parte del teclado. Aunque se puede ver que la red hab\'ia memorizado tanto la computadora como el celular, la parte incompleta de la computadora resulta en que el estado final de la red caiga para el lado del celular. Sin embargo, con la misma inicializaci\'on, pero con diferentes patrones memorizados, como el caso de la Figura 11, el estado final de la red es la computadora. Esto tiene que ver con las partes en las cuales los patrones que memoriza la red se parecen. En el primer caso, con la antena como tercer par\'ametro, la red genera atractores que son muy diferentes a los que genera la l\'inea situada a la izquierda como tercer par\'ametro.

En esta parte del trabajo fue cuando vimos la mayor diferencia entre el modelo de Little y el de Hopfield. Para ambas implementaciones se presentaron dos c\'irculos a memorizar. Un c\'irculo era el espejo del otro horizontalmente. Se inicializ\'o la red con una imagen de una superposici\'on de ambas im\'agenes. La salida de la implementaci\'on del modelo de Little fue, como se puede ver en la Figura 12, un ciclo de longitud 2 del cual la red no pod\'ia salir. Por el otro lado, en la implementaci\'on del modelo de Hopfield, el resultado fue, aleatoriamente, o un c\'irculo o el otro. Esto se puede ver en las Figuras 13 y 14.


\subsection*{Patrones que no pertenecen al conjunto de patrones memorizados}
Estos resultados se pueden observar en las Figuras 15, 16 y 17. En la 16 y 17 se puede observar la diferencia entre la versi\'on asincr\'onica y la sincr\'onica respectivamente. Se ve que llegan al mismo resultado pero la sincr\'onica llega en una menor cantidad de estados. En casi todos los resultados se ve que si se inicializa con un patr\'on que no pertenece al conjunto de patrones memorizados, la red devuelve una mezcla entre todos los que memoriz\'o, aunque el resultado no tenga ninguna similitud con el patr\'on que se inicializ\'o, como se ve en las Figuras 16 y 17 que es un c\'irculo izquierdo, y el resultado es un dibujo de algo en la parte derecha.

En otros casos sin embargo, la salida no es una mezcla, sino uno de los patrones que se memoriz\'o (ver Figura 18). La diferencia con el caso anterior se puede explicar ya que con ciertos patrones se crean estado esp\'ureos en los cuales la red puede caer. Esto depende de los patrones que se han memorizado.

Si lo memorizado es un \'unico patr\'on, y se inicializa con uno completamente diferente, la salida es el patr\'on memorizado (ver Figura 19).

\subsection*{Versi\'on inversa de los patrones a memorizar}
En estos casos los resultados son siempre el inverso al patr\'on que se ha memorizado. A\'un cuando el inverso con el cual se inicializa tiene ruido, como se puede ver en las Figuras 20 y 21, la salida de la red es el inverso del patr\'on memorizado correspondiente. Otro resultado se puede ver en la Figura 22, en la que se ve como, aunque la inicializaci\'on sea una imagen completamente negra, existe un atractor que hace que la red devuelva el inverso del micr\'ofono.

\subsection*{Otros casos}
Otro caso que se tom\'o en cuenta fue el de las letras. Las im\'agenes disponibles para esto fueron las letras \textit{A}, \textit{H} y \textit{F}, donde \textit{A} y \textit{H} son iguales a excepci\'on de la raya horizontal que une los dos palos verticales en la \textit{A}. Se realizaron varias pruebas. Dado que la \textit{F} tiene un corrimiento con respecto a la posici\'on de las otras, no suma mucho en las pruebas hechas. Es muy interesante ver como, aunque la \textit{A} est\'e dentro del conjunto de im\'agenes memorizadas, si se inicializa la red con la \textit{A}, el resultado de la red va a ser la \textit{H}. Ver figura 23.

\subsection*{Capacidad de almacenamiento}
Para determinar la m\'axima cantidad de patrones a memorizar se hicieron varias pruebas con distintos conjuntos de patrones. Un resultado de estas pruebas se puede ver en la Figura 24. En esta figura, la primera columna contiene la cantidad de patrones con las que se memoriza. La segunda contiene el patr\'on que se agrega al conjunto a memorizar. La tercera, la salida de la red. La cuarta columna muestra el c\'alculo del $P_{error}$.
Por ejemplo, en la cuarta fila de la figura, se muestran los resultados de cuatro patrones memorizados, los cuales son los primeros cuatro patrones de la segunda columna, la salida esperada en la tercera columna y un $P_{error}=0$.


Como se puede obvservar, el valor del $P_{error}$ va subiendo a medida que aumenta la cantidad de patrones almacenados. Al mismo tiempo, el estado final de la red diverge cada vez m\'as del esperado. 

La condici\'on de corte que se utiliz\'o es $P_{error}=0.06$ ya que a partir de ese valor los resultados obtenidos divergen mucho del resultado esperado. La cantidad de patrones a memorizar para cumplir con esta cota es de 7-8. Este valor puede variar dependiendo de cuales sean los patrones que se utilizan para memorizar. Si los patrones son muy similares en ciertos sectores de la imagen, la capacidad de almacenamiento disminuye, ya que se la red comienza a confundirlos. 

\section*{Conclusiones}

\subsection*{Atractores}

En esta secci\'on del trabajo se llega a la conclusi\'on que cuando la red intenta memorizar muchos patrones, se comienzan a crear otro tipo de atractores. Estos atractores son estados estables, llamados estados esp\'ureos, que no son ninguno de los patrones que la red tuvo que memorizar, y pueden ser sus complementos, una combinaci\'on de un n\'umero impar de patrones, o un estado totalmente nuevo que puede aparecer en caso que la cantidad de patrones sea muy alta.

En los casos en los que se inicializa con uno de los patrones que la red ha memorizado, y \'esta devuelve el mismo patr\'on, se logra verificar que efectivamente ese patr\'on es un verdadero atractor del sistema.

\subsection*{Versiones ruidosas o incompletas de los patrones memorizados}
En esta secci\'on se llega a varias conclusiones. Una de ellas es que cuando se inicializa la red con un patr\'on que se memoriz\'o, pero con ruido o incompleto, en la mayor\'ia de los casos, la red devuelve el patr\'on original. Esto demuestra, de la misma forma que la secci\'on anterior, que al memorizar patrones, la red genera estas cuencas de atracci\'on a donde ``cae'' el estado de la red. Sin embargo, como se ha visto en muchos otros casos, cuando la cantidad de patrones que debe memorizar la red es muy grande, o los patrones contienen muchas similitudes (mismo bit en la misma posici\'on), la red genera otras cuencas de atracci\'on, a donde la red puede ir evolucionando su estado. Estos estados son mezcla de los estados generados directamente por cada uno de los patrones memorizados por la red.

Analizando los resultados obtenidos de las versiones incompletas se llega a la conclusi\'on de que hay atractores que se generan y son una representaci\'on de las partes que m\'as tienen en com\'un los patrones memorizados. Esto se debe a que se generan cuencas de atracci\'on que representan las intersecciones de los patrones memorizados.

\subsection*{Patrones que no pertenecen al conjunto de patrones memorizados}
Vale la pena remarcar que no siempre la red evoluciona a un estado parecido al que se la inicializ\'o. No se pudo encontrar una estandarizaci\'on de que es lo que sucede con los patrones que no pertenecen al conjunto de patrones memorizados. Cuando la cantidad de patrones memorizados es poca (menor a 3), la red evoluciona a alguno de ellos (a la que m\'as se le parace). Cuando la cantidad de patrones es mayor, evoluciona a un estado mezcla, en muchos casos a uno que no tiene similitud alguna con el estado de inicializaci\'on.

\subsection*{Versi\'on inversa de los patrones a memorizar}
En esta secci\'on se concluye que cuando se memoriza un patr\'on, tambi\'en se memoriza el inverso, y este se convierte en un nuevo atractor. Al probar cualquiera de las configuraciones mencionadas a lo largo del trabajo, pero inicializando la red con el inverso del patr\'on, se llega al resultado inverso del resultado original.

\subsection*{Letras}
En el caso de las letras, se llega a la conclusi\'on que la red toma la parte superior de la \textit{A} como ruido de la \textit{H}, y es por eso que, aunque se inicialice la red con la \textit{A}, el resultado es siempre la imagen de la \textit{H}.


\subsection*{Capacidad de almacenamiento}
El resultado al que se llega es razonable ya que a medida que se aumenta la cantidad de estados a memorizar, la posibilidad de que se generen estados esp\'ureos, combinaci\'on de patrones memorizados, es cada vez mayor. Por consecuencia, mayor es la probabilidad de que la red ``caiga'' en un estado que no es el esperado, a\'un cuando se inicializa con un patr\'on con el cual se entren\'o a la red.

\subsection*{Otras conclusiones}
Al haber implementado ambos modelos, el de Little y el de Hopfield se ve que la mayor diferencia es la cantidad de estados por los que se pasa para llegar al resultado final. En el modelo de Little, en la mayor\'ia de los casos se llega al resultado en pocos cambios de estado. Por otro lado, en casos como el que se mostr\'o en la Figura 12, se pueden generar ciclos, sin llegar a ning\'un resultado estable. En el modelo de Hopfield, la red evoluciona una mayor cantidad de veces hasta llegar a un estado fijo, pero dado que evolucionan las neuronas de a una a la vez y no en conjunto, se evitan los ciclos que se pueden generar en el modelo de Little.


\newpage
\onecolumn
\section*{Anexo}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/30/result.png}
        \caption{6 patrones a memorizar, salida mezcla}
			\label{1}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/29/result.png}
        \caption{5 patrones a memorizar, salida correcta}
			\label{2}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/31/result.png}
        \caption{Menos patrones a memorizar, salida correcta}
			\label{3}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/32/result.png}
        \caption{Menos patrones a memorizar, salida correcta}
			\label{4}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/26/result.png}
        \caption{Inicializaci\'on con ruido (imagen invertida), pocos patrones a memorizar}
			\label{5}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/33/result.png}
        \caption{Inicializaci\'on con ruido}
			\label{6}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/19/result.png}
        \caption{Inicializaci\'on con ruido, muchos patrones a memorizar}
			\label{7}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/27/result.png}
        \caption{Inicializaci\'on con ruido (imagen invertida)}
			\label{8}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/34/result.png}
        \caption{Inicializaci\'on con ruido, muchos patrones a memorizar, repetido con el cual inicializo}
			\label{9}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/41/result.png}
        \caption{Inicializaci\'on incompleta}
			\label{10}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/42/result.png}
        \caption{Inicializaci\'on incompleta}
			\label{11}
	\end{center}
\end{figure}
\clearpage
\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/9/result.png}
        \caption{Modelo Little}
			\label{12}
	\end{center}
\end{figure}
\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/12/result.png}
        \caption{Modelo Hopfield 1}
			\label{13}
	\end{center}
\end{figure}
\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/14/result.png}
        \caption{Modelo Hopfield 2}
			\label{14}
	\end{center}
\end{figure}
\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/36/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado}
			\label{15}
	\end{center}
\end{figure}
\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/18/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado}
			\label{16}
	\end{center}
\end{figure}
\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/2/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado (sincr\'onico)}
			\label{17}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/43/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado}
			\label{18}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/37/result.png}
        \caption{Inicializaci\'on diferente a lo memorizado (1 solo patr\'on)}
			\label{19}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/16/result.png}
        \caption{Patr\'on invertido con ruido}
			\label{20}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/44/result.png}
        \caption{Patr\'on invertido}
			\label{21}
	\end{center}
\end{figure}
\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/45/result.png}
        \caption{Patr\'on invertido}
			\label{22}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[height=35mm, keepaspectratio=true] {results/38/result.png}
        \caption{Letras}
			\label{23}
	\end{center}
\end{figure}

\begin{figure}[ht]
	\begin{center}
		\includegraphics[keepaspectratio=true] {results/MAX.png}
        \caption{Capacidad de almacenamiento}
			\label{24}
	\end{center}
\end{figure}

\end{document}